// 给定一个字符串S，检查是否能重新排布其中的字母，使得两相邻的字符不同。
// 若可行，输出任意可行的结果。若不可行，返回空字符串。

// 示例 1:
// 输入: S = "aab"
// 输出: "aba"

// 示例 2:
// 输入: S = "aaab"
// 输出: ""

// 注意:
//     S 只包含小写字母并且长度在[1, 500]区间内。
//////aaabc
/**
 * @param {string} s
 * @return {string}
 */

//////思路：1.字符串长度为1的直接返回本身
////////////2.统计各自母的次数，按最多次数排序，如果最多的字母数量比其他的数量多了超过1则直接返回空
////////////3.分隔字符串，按照最多数量来分，放入数组，循环这个数组每次都分别取一个
////////////4. 用时整半天 Fuck!
var reorganizeString = function(s) {
    let sLen = s.length;
    if (sLen === 1) return s;
    // let cntArray = new Array(26).fill(0);
    // for(let i = 0;i < sLen; i++) { ///用这方法后面不好重新排列
    //     cntArray[s[i].charCodeAt() - 97]++;
    // }
    // cntArray.sort((a, b)=>{
    //     return b - a;
    // });
    let map = new Map();
    for(let i=0; i< s.length; i++){
        map.set(s[i], (map.get(s[i]) || 0) + 1);
    }
    let array = Array.from(map); /////////////fuck!竟然忘了这种方法
    array.sort((a, b) => {
        return b[1] - a[1];
    });
    
    if (array[0][1] > sLen - array[0][1] + 1) {
        return "";
    }
    ////对原数组按照出现次数重新排列下
    let temp = "";
    for(let i = 0; i < array.length; i++) {
        temp += array[i][0].repeat(array[i][1]);
    }
    // //////把字符串转换为数组按照最多次数分隔
    let tempArray = [];
    for(let i = 0; i < sLen; i += array[0][1]) {
        tempArray.push(temp.slice(i, i + array[0][1]));
    }
    console.log(tempArray);
    /////分别取一个
    let result = "";
    for(let i = 0; i < array[0][1]; i++) {
        for(let j = 0; j < tempArray.length; j++) {
            if (tempArray[j][i]) {
                result += tempArray[j][i];
            }
        }
    }
    return result;
};
console.log(reorganizeString("abcaaabcc"));

